<?php
// Nohuman Studio
// Projet : Namuhon V2.1
// Developpeur : Jerome ARNOULT

//--------------------------
// ETAPE 1 : Initiation de la session, configuration du report d'erreur et déclaration d'un compteur de temps a l'appel de la page

// On initie un compteur de temps, pour connaitre le temps mis a générer la page
$microtimeOnPageRequest = microtime(true);

// On initie une session
session_start();

// On empeche l'affichage des notice, le noyau gérera les erreurs
// --------
// La déclaration se fait en dehors de la structure objet
// pour éviter d'avoir la config serveur par défault en cas de plantage noyau
error_reporting(E_ALL ^ E_NOTICE);


//--------------------------
// ETAPE 2 : Instance principale et fonctions basiques

// Fonction de Debugguage, uniquement pour dev
// ---------
// Elle est extériorisé dans le cas ou le noyau planterait et qu'on en aurait besoin
// On ne peut donc pas l'inclure dans une extension d'objet comme common par exemple
function debug($var){
    print "\n<div align=\"left\">\n<pre>";
    print_r($var);
    print "\n</pre>\n</div>";
}

// Fonction d'include externe a main pour l'instanciation des modules et autres si nécessaire
// ---------
// L'inclusion ne pouvant se faire dans l'objet directment
// l'appel se fait a l'extérieur de l'objet du noyau
// Il ne peut servir uniquement qu'a inclure des objets (.class.php, .php, .inc)
function includeClass($path){
    //Vérification de l'extension du fichier a inclure, on inclut pas n'importe quoi
    if(preg_match("#.+[\.class]?[\.php|\.inc]$#",$path))
        return include_once($path);
    //Sinon l'inclusion ne se fera tout bonnement pas, pas d'erreur a déclarer, pour eviter un hack qui pourrirait le site
}

//On apelle l'objet main conteneur de l'architecture de l'objet du noyau complet, modules et sous-modules actifs compris.
//Les dossier sont en dur, il faudra trouver une parade suivant les cas en utilisant realpath etc.. pour eviter ce qui suis :
// Cas 1 : le fichier index est dans un dossier a part (generalement www), différent du noyau qui lui est a la racine
if(file_exists("../class/main.class.php")){
    require_once("../class/main.class.php");
}
// Cas 2 : le fichier index est a la racine du site, comme le noyau
elseif(file_exists("./class/main.class.php")){
    require_once("./class/main.class.php");
}
// Cas 3 : le fichier index a un emplacement inconnu par rapport au noyau
else{
    die("<div style='background:#CACACA;width:400px;border:1px solid #FF0000;margin:auto;margin-top:200px;height:100px;padding:20px;'>Check your directory and files, an error occured when we try to find the framework's core</div>");
}



//On déclare et instancie l'objet main en envoyant la variable microtime générée a l'appel de la page
new main($microtimeOnPageRequest);

//Main va a partir de la travailler tout seul afin de mettre en place
//l'environnement pour le reste :
// - Mise en place des configs (déclarés dans le fichier de conf)
// - Mise en place du noyau (extensions de main, c'est a dire : DAO (Data Access Object), error (gestion des erreurs), lang (gestion langues), modules (gestion des modules), common (fonctions basique récurrentes))
// - capture des arguments de la requete (reformulé grace a l'urlrewriting)
// - recherche du modules ou des modules correspondants a la requête (appel de l'extension modules, pour recherche et instanciation du ou des modules concernés)

// Main construit la page :
//Génération des tags (noyau + module(s)), déclaration du template, insertions des tags (contenus) dans le(s) template(s)

//Plus d'infos dans les commentaires de main ;)
?>